local actmag=require'zdc.actmag'.DEFAULT
local ETSKSTAT=require'zdc.typetsk'.ETSKSTAT
module(..., package.seeall)

local TaskDo = {}
local TaskDo_mt = {__metatable = {}, __index = TaskDo}

function MakeInhMT(ch)
	ch=ch or {}
	for _i,_j in pairs(TaskDo) do
		ch[_i]=_j
	end
	return ch
end

function new(dal,tskid,taskdef, logger,childmt)
	local obj=setmetatable({dal=dal,tskid=tskid,taskdef=taskdef,logger=logger or zdc.logger.defaultlog}, childmt or TaskDo_mt)
	return obj
end

function TaskDo:get_task_act()
	local actfun=self.taskdef.taction
	if actfun then
		if type(actfun)~='function' then
			local am=self.dal.actmag or actmag
			actfun=am:RequireActFun(f)
		end
		return actfun
	else
		return nil
	end
end

function TaskDo:set_task_stat(unlock,stat,msg,lognode)
	self.dal:CallNode(nil,self.tskid,'SetStat',{unlock=unlock,stat=stat,msg=msg,lognode=lognode})
end

function TaskDo:dotask()
	--step 1 , 分析任务, 更新状态
	local fun=self:get_task_act()
	if not fun then
		self:set_task_stat(true,ETSKSTAT.invalid,'invalid action')
		return
	end
	self:set_task_stat(nil,ETSKSTAT.running)
	--step 2 , 处理任务
	local ok,msg=pcall(fun,self)
	--step 3 , 更新结果
	if ok then
		self:set_task_stat(true,ETSKSTAT.done)
	else
		self:set_task_stat(true,ETSKSTAT.exc,msg)
	end
end